//js中函数作为一等公民，可以是参数和返回值

//①函数作为参数
function calc(num1, num2, fn) {
  return fn(num1, num2)
}

function add(num1, num2) {
  return num1 + num2
}

function sub(num1, num2) {
  return num1 - num2
}

console.log(calc(10, 20, add))  //10+20 = 30
console.log(calc(10, 20, sub))  //10-20 = -10


//②函数作为返回值
function makeAdder(count) {
  function add(num) {
    return count + num
  }
  
  return add
}

var add5 = makeAdder(5)
var add10 = makeAdder(10)
console.log(add5(10))//5+10
console.log(add10(10))//10+10


//高阶函数指的是接收函数作为参数或者返回一个函数的函数，如上面的calc、makeAdder
